#ifndef LOGGER_H
#define LOGGER_H

#include <cstdio>

#ifndef LOG
#define LOG(_instance_, _func_, _fmt_, args...) \
    _instance_._func_("[%s][%s][%d] "_fmt_, \
    __FILE__, __FUNCTION__, __LINE__, ##args)
#endif

/* 线程不安全 */
class Logger {
public:
    Logger(const char *dir, const char *fname);

    explicit Logger(const char *fname);

    ~Logger();

    void write_fatal(const char *fmt, ...);
    void write_warning(const char *fmt, ...);
    void write_notice(const char *fmt, ...);

private:
    /* 普通日志文件路径 */
    char *flog_path;

    /* Fatal日志文件路径 */
    char *ffatal_path;

    /* 普通日志文件句柄 */
    FILE *flog;

    /* Fatal日志文件句柄 */
    FILE *ffatal;

    void open_log_file();
};

#endif // LOGGER_H
